package com.example.test.advice.第十一章_开源世界.建议142_推荐使用Joda日期时间扩展包;

import ch.lambdaj.Lambda;
import gnu.trove.decorator.TIntListDecorator;
import gnu.trove.function.TIntFunction;
import gnu.trove.list.TIntList;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.procedure.TIntProcedure;
import it.unimi.dsi.fastutil.BigList;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.objects.ObjectBigArrayBigList;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Hours;
import org.joda.time.format.DateTimeFormat;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/**
 * jdk1.8中日期、时间api已经比较完善，可以取待Joda了
 * 此处可以选择掠过,如果有兴趣，可以学一下
 */
public class DateDemo {

    public static void main(String[] args) throws Exception{
        test1();
        System.out.println("============test2");
        test2();
        System.out.println("============test3");
        test3();
    }

    //本地格式的日期时间
    private static void test1(){
        //当前时间戳
        DateTime dt = new DateTime();
        //输出英文星期
        System.out.println("英文星期："+dt.dayOfWeek().getAsText(Locale.ENGLISH));
        System.out.println("本地日期格式："+dt.toLocalDate());
        //日期格式化
        System.out.println("日期格式化："+dt.toString(DateTimeFormat.forPattern("yyyy年M月d日")));
    }

    //日期计算
    private static void test2(){
        //当前时间戳
        DateTime dt = new DateTime();
        //加100小时是星期几
        System.out.println("加班100小时："+dt.plusHours(100).dayOfWeek().getAsText());
        //100天后的日期
        System.out.println("100天后的日期："+dt.plusDays(100).toLocalDate());
        //10年前的今天是星期几
        System.out.println("10年前的今天是星期几："+dt.minusYears(10).dayOfWeek().getAsText());
        //离地球毁灭还有多少小时
        System.out.println("离地球毁灭还有多少小时："+ Hours.hoursBetween(dt,new DateTime("2022-12-21")).getHours());
    }

    //时区时间
    private static void test3(){
        //当前时间戳
        DateTime dt = new DateTime();
        //此时伦敦市的时间
        DateTime london = dt.withZone(DateTimeZone.forID("Europe/London"));
        System.out.println("伦敦时间："+london);
        //计算出标准时间
        DateTime standard = dt.withZone(DateTimeZone.UTC);
        System.out.println("标准时间："+standard);

        //Joda的DateTime转换为JDK的Date
        Date jdkDate = dt.toDate();
        //jdk的Date转换为Joda的DateTime
        dt = new DateTime(jdkDate);
    }


}
